﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.Objects;
using System.Linq;
using System.Text;
using VirtualShopEngineData;
using VirtualShopEngineLogic.Helpers;

namespace VirtualShopEngineLogic
{
    public class ProvinciaPresenter
    {
        private readonly IProvinciaView _provinciaView;
        private readonly CatalogoDeProductosEntities _catalogoDeProductosEntities;
        private Paginator _paginator;
        public ProvinciaPresenter(IProvinciaView provinciaView, CatalogoDeProductosEntities catalogodeProductosEntities, Paginator paginator)
        {
            _provinciaView = provinciaView;
            _catalogoDeProductosEntities = catalogodeProductosEntities;
            _paginator = paginator;

        }
        public ProvinciaPresenter(IProvinciaView provinciaView, Paginator paginator)
            : this(provinciaView, new CatalogoDeProductosEntities(), paginator)
        {
        }

       public int Save()
        {
            Provincia provincia = new Provincia();
            provincia.ISO = _provinciaView.Iso;
            provincia.Nombre = _provinciaView.Nombre;
            provincia.Abreviacion = _provinciaView.Abreviacion;
            _catalogoDeProductosEntities.AddToProvincia(provincia);
            _catalogoDeProductosEntities.SaveChanges();
            return provincia.IDProvincia;
        }
        public List<Provincia> GetProvincias()
        {
           return _catalogoDeProductosEntities.Provincia.ToList();
        }

        public Provincia LoadProvincia(int idProvincia)
        {
            return _catalogoDeProductosEntities.Provincia.Where(x => x.IDProvincia == idProvincia).ToList()[0];
        }

        public void SaveChanges(Provincia prov)
        {
            prov.Nombre = _provinciaView.Nombre;
            prov.ISO = _provinciaView.Iso;
            prov.Abreviacion = _provinciaView.Abreviacion;
            _catalogoDeProductosEntities.Refresh(RefreshMode.ClientWins, new List<Provincia>() { prov });
           _catalogoDeProductosEntities.SaveChanges();
        }
        
        public int GetProvinciaCount()
        {
            return _catalogoDeProductosEntities.Provincia.Count();
        }

        public List<Provincia> GetPage(int pageNumber)
        {
            return _catalogoDeProductosEntities.Provincia.OrderBy(x => x.Nombre).Skip((pageNumber-1)*Paginator.PageSize).Take(Paginator.PageSize).ToList();
        }

        public Paginator Paginator
        {
            get{ return _paginator;}
        }
        

    }
}
